跳到主要内容

Harbor 镜像仓库

Harbor 简介

Harbor(港口,港湾)是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器。

除了 Harbor 这个私有镜像仓库之外,还有 Docker 官方提供的 Registry。相对 Registry,Harbor 具有很多优势:

  1. 提供分层传输机制,优化网络传输 Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用 FTP 的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的 UUID 为标识,确定传输的对象。
  2. 提供 WEB 界面,优化用户体验 只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
  3. 支持水平扩展集群 当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
  4. 良好的安全机制 企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。

Harbor 安装

1、先安装 Docker 并启动 Docker

2、安装 docker-compose

3、下载 Harbor :https://github.com/goharbor/harbor/releases

4、上传压缩包到 Linux,并解压

tar -xzf harbor-offline-installer-v2.2.2.tgz
sudo mkdir /opt/harbor
sudo mv harbor/* /opt/harbor
cd /opt/harbor

5、修改 Harbor 的配置

# 注意!!这里应该基于内置提供的模板进行修改
vi harbor.yml

修改 hostname 和 port

hostname: 192.168.211.130
port: 85

要把 https 注释掉,否则还要配置证书

6、安装 Harbor

sudo ./prepare
sudo ./install.sh

安装成功后,可以通过 docker login 命令来测试仓库的连通性,看到如下字样即表示安装成功(也可以通过浏览器访问 Web UI)

# 默认账户密码:admin/Harbor12345
# 访问:http://192.168.211.130:85/

成功:

使用 Helm 部署 Harbor

# 上官网添加
# https://artifacthub.io/packages/helm/harbor/harbor
helm repo add harbor https://helm.goharbor.io
helm pull harbor/harbor

把下载的压缩包解压

# 解压
tar -zxvf harbor-1.12.0.tgz

20230508145821

然后修改 values.yaml 文件

# 通过 nodePort 提供访问
expose.type: nodePort
# 禁用了 tls
expose.tls.enabled: false
# 访问地址,因为禁用了 tls,所以这些的协议一定要改成 http,然后后面要加上 nodeport 的固定端口
externalURL: http://192.168.2.55:30002

# 禁用一些没必要的服务,以避免浪费资源
# 1、容器镜像安全扫描
trivy.enabled: false
# 2、容器镜像中可以对镜像进行加密签名用来保证镜像件来源和镜像内容防篡改
notary.enabled: false

最后进行部署

cd harbor
helm install harbor --namespace harbor --create-namespace .
sudo kubectl get pod -n harbor

20230508151840

http://localhost:30002

20230508151957

重启 Harbor

harbor 通过 docker-compose.yml 配置文件的形式管理

所以直接使用

# 停止
docker-compose stop
# 启动
docker-compose up -d

# 但是只有手动停止才能这样自启

# 如果是重启导致的停止得重新,,,
sudo ./install.sh

# 使用docker-compose ps查看容器
docker-compose ps

# 使用docker logs -f harbor-log查看harbor-log日志:
docker logs -f harbor-log

在 Harbor 创建用户和项目

创建项目

Harbor 的项目分为公开和私有的:

公开项目:所有用户都可以访问,通常存放公共的镜像,默认有一个 library 公开项目。 私有项目:只有授权用户才可以访问,通常存放项目本身的镜像。

可以为微服务项目创建一个新的项目:

创建用户

在项目中添加上面创建的用户

角色权限说明
访客对于指定项目拥有只读权限
开发人员对于指定项目拥有读写权限
维护人员对于指定项目拥有读写权限,创建 Webhooks
项目管理员除了读写权限,同时拥有用户管理/镜像扫描等管理权限

以新用户登录 Harbor

把镜像上传到 Harbor

给镜像打上标签

# 这里是 Harbor 的地址(不过这里加上 ip 只是方便查看,并没有其它意义)
# 这个镜像是 dockerfile 那一篇自己创建的镜像
sudo docker tag eureka:v1 192.168.211.130:85/studyjenkins/eureka:v1

推送镜像

# 推送
sudo docker push 192.168.211.130:85/studyjenkins/eureka:v1

这时会出现以上报错,是因为 Docker 没有把 Harbor 加入信任列表中

把 Harbor 地址加入到 Docker 信任列表

sudo vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.211.130:85"]
}

需要重启 Docker

sudo systemctl daemon-reload
sudo systemctl restart docker

再次执行推送命令,会提示权限不足

需要先登录 Harbor,再推送镜像

sudo docker login -u 用户名 -p 密码 192.168.211.130:85

从 Harbor 下载镜像

1、安装 Docker,并启动 Docker 2、修改 Docker 配置

vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.211.130:85"]
}

重启 Docker

sudo systemctl daemon-reload
sudo systemctl restart docker

需要先登录 Harbor,再下载镜像

sudo docker login -u 用户名 -p 密码 192.168.211.130:85

# 下载镜像
docker pull 192.168.211.130:85/studyjenkins/eureka:v1